import React, { Component } from 'react'
import PubSub from 'pubsub-js'
import './index.css'

export default class List extends Component {

  // 初始化状态
  state = {
    users: [], // users初始值为数组
    isFirst: true, // 是否第一次打开页面
    isLoding: false, // 标识是否处于加载中
    err: '' // 存储请求相关错误信息
  }

  // 组件挂载渲染完成回调
  componentDidMount() {
    this.token = PubSub.subscribe('updateList', (_, data) => {
      console.log('List接受消息', data);
      // 更新状态
      this.setState(data)
    })
  }

  // 组件卸载销毁前回调
  componentWillUnmount() {
    PubSub.unsubscribe(this.token)
  }

  render() {
    const { users, isFirst, isLoading, err } = this.state
    return (
      <div className="row">
        {
          isFirst ? <h2>欢迎使用，输入关键字，随后点击搜索</h2> :
            isLoading ? <h2>Loading......</h2> :
              err ? <h2>{err}</h2> :
                users.map((userObj) => {
                  return (
                    <div key={userObj.id} className="card">
                      <a href={userObj.html_url} target="_blank" rel="noreferrer">
                        <img alt="avatar" src={userObj.avatar_url} style={{ width: '100px' }} />
                      </a>
                      <p className="card-text">{userObj.login}</p>
                    </div>
                  )
                })
        }
      </div>
    )
  }
}
